//#include<iostream>
//using namespace std;
//
//
//class A
//{
//public:
//	A(const char* a) { cout << a << endl; }
//	~A() {}
//};
//
//class B:public A
////class B : virtual public A
//{
//public:
//	B(const char* a, const char* b)
//		:A(a)
//	{
//		cout << b << endl;
//	}
//};
//
//class C :public A
//	//class C:virtual public A
//{
//public:
//	C(const char* a, const char* c)
//		:A(a)
//	{
//		cout << c << endl;
//	}
//};
//
//class D : public B, public C
//{
//public :
//	D(const char* a, const char* b, const char* c, const char* d)
//		:B(a, b)
//		,C(a, c)
//		//,A(a)
//	{
//		cout << d << endl;
//	}
//};
//
//
//int main()
//{
//	D* p = new D("class A", "class B", "class C", "class D");
//	delete p;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class A
//{
//public:
//	virtual void func(int val = 1) { cout << "A->" << val << endl; }
//	virtual void test() { func(); }
//};
//
//class B : public A
//{
//public :
//	void func(int val = 0) { cout << "B->" << val << endl; }
//};
//
//int main()
//{
//	B* p = new B;
//	p->test();
//	return 0;
//}


#include <iostream>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
queue<PII> q;
const int N = 200;
int maze[N][N], sz[N][N];
int dx[4] = { -1, 0, 1, 0 }, dy[4] = { 0, -1, 0, 1 };
int n, m;

int bfs()
{
    // cout << n << m << endl;
    // cout << sz[1][1] << endl;
    q.push({ 1, 1 });
    while (!q.empty())
    {
        auto tt = q.front();
        // cout << tt.first << ":" << tt.second << endl;
        q.pop();
        for (int i = 0; i < 4; ++i)
        {
            int xx = tt.first + dx[i], yy = tt.second + dy[i];

            if (xx <= m && xx >= 1 && yy <= n && yy >= 1 && !maze[xx][yy] && !sz[xx][yy])
            {
                //cout << xx << ":" << yy << endl;
                sz[xx][yy] = sz[tt.first][tt.second] + 1;
                if (xx == n && yy == m)
                    return sz[xx][yy];
                q.push({ xx, yy });
            }
        }
    }
}

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            cin >> maze[i][j];
    cout << bfs() << endl;
    return 0;
}